<?php

/*
 * CLASSE QUE EXTENDE O MOTOR SMARTY PARA QUE 
 * O SISTEMA NAO FIQUE PRESO SOMENTE COM O SMARTY
 *
 * @author Adelson
 */

class Loadview extends Smarty {

    //propriedade estatica
    private static $instance;

    /* -------------------------------------------------------------------------------------------------
     * INSTANCIA O CONTRUTOR DA CLASSE SMARTY
     * MAIS SOBRE O SMARTY ACESSE O DOC - http://www.smarty.net/docsv2/pt_BR/ 
     * ------------------------------------------------------------------------------------------------ */

    public function __construct() {
        parent::__construct();
        
        $template_file = "index.tpl";
        if(isset($_GET['controller'])){
            $template_file = $_GET['controller'].".tpl";
        }
        #Define os diretorios de cache e copilacao
        $this->setTemplateDir(BASEPATH . "views"); //files tpl
        $this->setCacheDir(BASEPATH . "libs/smarty/cache");
        $this->setConfigDir(BASEPATH . "libs/smarty/configs");
        $this->setCompileDir(BASEPATH . "libs/smarty/template_c");

        #define os delimetadores do smarty
        //$this->left_delimiter  = "{";
        //$this->right_delimiter = "}";
        #Cache e copiladores
        
        $this->compile_check = true;
        $this->clearCompiledTemplate($template_file);
        $this->clearAllCache($template_file);
        $this->force_compile = false;
        
        $this->caching = false;
        
        $this->cache_lifetime = 0;
        #setas as variaveis dedfault do sistema
        $this->assign("BASEPATH", BASEPATH);
        $this->assign("URLDOMINIO", URLDOMINIO);
        $this->assign("additionalCssFile", '');
        $this->assign("additionalJsFile", '');
        
    }

    /* -------------------------------------------------------------------------------------------------
     * INSTANCIA O CONTRUTOR DA CLASSE SMARTY CASO SEJE CHAMADO EM OUTRO METODO
     * MAIS SOBRE O SMARTY ACESSE O DOC - http://www.smarty.net/docsv2/pt_BR/ 
     * ------------------------------------------------------------------------------------------------ */

    public function getInstance() {
        if (!isset(self::$instance)) {
            try {
                self::$instance = new Loadview();
            } catch (Exception $ex) {
                error_log($ex->getMessage());
                exit("Temporariamente indisponivel");
            }
        }
        return self::$instance;
    }

    /* -------------------------------------------------------------------------------------------------
     * METODO QUE CRIA E ADICIONA VALORES NA VARIAVEL
     * @PARAM STRING $var = NOME DA VARIAVEL
     * @PARAM MIXED  $value = VALOR QUE SERA ATRIBUIDO NA VARIAVEL
     * MAIS SOBRE O SMARTY ACESSE O DOC - http://www.smarty.net/docsv2/pt_BR/ 
     * ----------------------------------------------------------------------------------------------- */

    public function addValue($var, $value) {
        $this->getInstance()->assign($var, $value);
    }

    /* -------------------------------------------------------------------------------------------------
     * METODO QUE CRIA EXIBIRA O TEMPLATE(VIEW) NA TELA DO USUARIO 
     * @PARAM STRING $view = NOME DA VIEW QUE SERA EXIBIDA PRO USUARIO
     * @PARAM BOOL   $native = SE TRUE PASSARA A USAR O METODO NATIVO DO SMARTY JA EXECUTADO CASO -
     * CONTRARIO IRA INSTACIA-LO PARA DEPOIS USAR
     * MAIS SOBRE O SMARTY ACESSE O DOC - http://www.smarty.net/docsv2/pt_BR/ 
     * ----------------------------------------------------------------------------------------------- */

    public function loadView($view, $native = false) {
        if (!$native) {
            $this->getInstance()->display($view);
        } else {
            $this->display($view);
        }
    }
    
    /* -------------------------------------------------------------------------------------------------
     * METODO QUE ADICIONA ARQUIVO CSS NA HEAD
     * @PARAM ARRAY $paths = CAMINHO DO ARQUIVO CSS
     * @RETURN VOID
     * ----------------------------------------------------------------------------------------------- */
    protected function additionalCssFile($paths=null){
        if(!is_null($paths)){
            $css=null;
            foreach ($paths as $v){
               $css.= "<link rel='stylesheet' type='text/css' href='{$v}' />".PHP_EOL;
            }
            $this->assign('additionalCssFile',$css);
            //return $css;
        }else{
             $this->assign('additionalCssFile',NULL);
        }
        
    }
    
    /* -------------------------------------------------------------------------------------------------
     * METODO QUE ADICIONA ARQUIVO JS NO DOM
     * @PARAM ARRAY $paths = CAMINHO DO ARQUIVO CSS
     * @RETURN VOID
     * ----------------------------------------------------------------------------------------------- */
    protected function additionalJsFile($paths=null){
        if(!is_null($paths)){
            $js=null;
            foreach ($paths as $v){
               $js.= "<script type='text/javascript' src='{$v}' ></script>".PHP_EOL;
            }
            $this->assign('additionalJsFile',$js);
        }else{
            $this->assign('additionalJsFile',NULL);
        }
        
    }
}
